package server;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

/**
 * Created by hasee on 2016/9/23.
 */
public class MinaServer {
    private static final int PORT = 9123;

    public static void main(String[] args){
        IoAcceptor acceptor = new NioSocketAcceptor(); //基于tpc/ip
        try {
            //IOFilter

            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() ); //日志
            acceptor.getFilterChain().addLast( "codec",
                    new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); //编码和解码
            //绑定处理类
            acceptor.setHandler(  new MinaServerHandler() );
            acceptor.getSessionConfig().setReadBufferSize( 2048 );//指定缓冲区大小以通知底层操作系统为传入的数据分配多少空间
            //什么时候检查空闲 session。
            // 在对 setIdleTime 的调用中，第一个参数定义了在断定 session 是否闲置时要检查的行为，
            // 第二个参数定义了在 session 被视为空闲之前以毫秒为单位的时间长度内必须发生
            acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
            acceptor.bind( new InetSocketAddress(PORT) ); //绑定到指定端口并开始处理远程客户端请求

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
